package forms;

import beans.Matiere;
import dao.DAOException;
import dao.MatiereDAO;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;

public class AjouterMatiereForm {
    
    private static final String CHAMP_MATIERE = "libelle"; 
    private String              resultat;
    private Map<String, String> erreurs          = new HashMap<String, String>();
    private MatiereDAO      matiereDao;

    public AjouterMatiereForm( MatiereDAO matiereDao ) {
        this.matiereDao = matiereDao;
    }

    public Map<String, String> getErreurs() {
        return erreurs;
    }

    public String getResultat() {
        return resultat;
    }
    
    public Matiere creerMatiere( HttpServletRequest request ) {
        String nomMatiere = getValeurChamp( request, CHAMP_MATIERE );
        Matiere matiere = new Matiere();
        
        try {
            traiterMatiere(nomMatiere, matiere);                          
            if ( erreurs.isEmpty() ) {
                matiereDao.creerMatiere(matiere);
                resultat = "La matière a été crée avec succès.";
            } else {
                resultat = "Echec de création de la matière, veuillez recommencer.";
            }
        } catch ( DAOException e ) {
            resultat = "Echec lors de la création de la matière : une erreur imprévue est survenue, merci de réessayer dans quelques instants.";
            e.printStackTrace();
        } 
        return matiere;
    }
    
    private void traiterMatiere( String nomMatiere, Matiere mat) {
        try {
            if (nomMatiere == null) {
                throw new FormValidationException( "Le nom de la matiere ne doit pas être vide." );
            }
            else if (nomMatiere.length() < 3 ) {
                throw new FormValidationException( "Le nom de la matiere doit contenir au moins 3 caractères." );
        }
        } catch ( FormValidationException e ) {
            setErreur( CHAMP_MATIERE, e.getMessage() );
        }
        mat.setLibelleMatiere(nomMatiere);
    }
    
       
    /*
     * Ajoute un message correspondant au champ spécifié à la map des erreurs.
     */
    private void setErreur( String champ, String message ) {
        erreurs.put( champ, message );
    }

    /*
     * Méthode utilitaire qui retourne null si un champ est vide, et son contenu
     * sinon.
     */
    private static String getValeurChamp( HttpServletRequest request, String nomChamp ) {
        String valeur = request.getParameter( nomChamp );
        if ( valeur == null || valeur.trim().length() == 0 ) {
            return null;
        } else {
            return valeur;
        }
    }

}
